package com.drug.mingkang.permission.mapper;


import com.drug.mingkang.permission.model.PerModule;
import com.drug.mingkang.permission.model.TreeNode;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 模块表(PerModule)表数据库访问层
 *
 * @author wenchangjian
 * @since 2020-08-11 12:00:14
 */
public interface PerModuleMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param moduleId 主键
     * @return 实例对象
     */
    PerModule queryById(String moduleId);

    /**
     * 查询指定行数据
     *
     * @param page 查询起始位置
     * @param limit 查询条数
     * @param type  按钮类型
     * @return 对象列表
     */
    List<PerModule> queryAllByLimit(@Param("page") int page,
                                    @Param("limit") int limit,
                                    @Param("moduleName") String moduleName,
                                    @Param("type") String type);


    /**
     * 总条数
     * @param moduleName 名字查询
     * @return
     */
    int count(@Param("moduleName") String moduleName,@Param("type") String type);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param perModule 实例对象
     * @return 对象列表
     */
    List<PerModule> queryAll(PerModule perModule);


    List<TreeNode> queryAllTreeNode();

    /**
     * 新增数据
     *
     * @param perModule 实例对象
     * @return 影响行数
     */
    int insert(PerModule perModule);

    /**
     * 选择性新增数据
     * @param perModule 实例对象
     * @return
     */
    int insertSelective(PerModule perModule);

    /**
     * 修改数据
     *
     * @param perModule 实例对象
     * @return 影响行数
     */
    int update(PerModule perModule);

    /**
     * 修改数据
     * @param perModule
     * @return
     */
    int updateMes(PerModule perModule);

    /**
     * 通过主键删除数据
     *
     * @param moduleId 主键
     * @return 影响行数
     */
    int deleteById(String moduleId);


    /**
     * 通过数组主键删除数据
     *
     * @param moduleIdAll 主键
     * @return 影响行数
     */
    int deleteAll(String[] moduleIdAll);


    /**
     * 根据所登入进来的用户查询所有模块
     * @param userId 用户Id
     * @return
     */
    List<PerModule> moduleAllByUserId(@Param("userId") Integer userId);

    /**
     * 根据id 查询所有父模块id为模块id的
     * @param moduleId
     * @return
     */
    List<PerModule> selectParent(@Param("moduleId") String moduleId);

    /**
     * 根据用户查询所有模块(菜单 目录)
     * @param userId
     * @return
     */
    List<PerModule> findByUserIdModuleAll(@Param("userId") Integer userId);

    /**
     * 根据用户查询所有模块 (菜单 目录 按钮)
     * @param userId
     * @return
     */
    List<PerModule> findByUserIdModuleAllButton(@Param("userId") Integer userId);
}